const R = require('ramda');

// 任意函数
const add = (x, y, z) => x + y + z


// 手写 柯里化 函数
// 口诀 ：
//  1. 参数慢慢来
//  2. 参数到齐就开席
//  3. 收集参数是递归
const curried = (fun) => {
    let len = fun.length;
    function curriedFun(...args) {
        
        return len > args.length ? (..._args) => curriedFun(...args,..._args) : fun(...args)
    }

    return curriedFun;

}
console.log(curried(add)(1,2,3));


// 调用第三方提供的 柯里化 函数
const curriedAdd = R.curry(add);
console.log(curriedAdd(1,2)(3));